package com.blog.cmrpersonalblog.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;

/**
 * 公告实体类
 */
@Data
@TableName("announcement")
public class Announcement {

    /**
     * 公告ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 公告标题
     */
    @TableField("title")
    private String title;

    /**
     * 公告内容
     */
    @TableField("content")
    private String content;

    /**
     * 公告类型 1-系统公告 2-活动公告 3-维护公告 4-其他
     */
    @TableField("type")
    private Integer type;

    /**
     * 公告级别 1-普通 2-重要 3-紧急
     */
    @TableField("level")
    private Integer level;

    /**
     * 公告状态 0-草稿 1-已发布 2-已过期 3-已删除
     */
    @TableField("status")
    private Integer status;

    /**
     * 是否置顶 0-否 1-是
     */
    @TableField("is_top")
    private Integer isTop;

    /**
     * 是否弹窗显示 0-否 1-是
     */
    @TableField("is_popup")
    private Integer isPopup;

    /**
     * 目标受众 all-所有用户 admin-管理员 user-普通用户
     */
    @TableField("target_audience")
    private String targetAudience;

    /**
     * 发布时间
     */
    @TableField("publish_time")
    private LocalDateTime publishTime;

    /**
     * 过期时间
     */
    @TableField("expire_time")
    private LocalDateTime expireTime;

    /**
     * 查看次数
     */
    @TableField("view_count")
    private Integer viewCount;

    /**
     * 创建人ID
     */
    @TableField("creator_id")
    private Long creatorId;

    /**
     * 创建人姓名
     */
    @TableField("creator_name")
    private String creatorName;

    /**
     * 更新人ID
     */
    @TableField("updater_id")
    private Long updaterId;

    /**
     * 更新人姓名
     */
    @TableField("updater_name")
    private String updaterName;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 判断公告是否已发布
     */
    public boolean isPublished() {
        return status != null && status == 1;
    }

    /**
     * 判断公告是否已过期
     */
    public boolean isExpired() {
        if (expireTime == null) {
            return false;
        }
        return LocalDateTime.now().isAfter(expireTime);
    }

    /**
     * 判断公告是否置顶
     */
    public boolean isTopAnnouncement() {
        return isTop != null && isTop == 1;
    }

    /**
     * 判断公告是否需要弹窗显示
     */
    public boolean isPopupAnnouncement() {
        return isPopup != null && isPopup == 1;
    }
}
